package com.meila.cms.services.impl;

 
import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import org.springframework.stereotype.Service;

import com.meila.cms.dao.RoleMapper;
import com.meila.cms.dao.UserRoleMapper;
import com.meila.cms.entity.Role;
import com.meila.cms.entity.UserRole;
import com.meila.cms.model.CmsException;
import com.meila.cms.model.RoleType;
import com.meila.cms.services.IRoleService;

@Service("roleService")
public class RoleService extends BaseService implements IRoleService {


	 
	/**
	 * 删除角色信息(在删除角色之前需要判断此角色中是否含有用户信息)
	 * @param id 角色id
	 */	
	@Override
	public int delete(int id) {
		//根据角色id获取用户列表
		List<UserRole> us = userRoleMapper.listRoleUsers(id);
		if (us != null && us.size() > 0)
			throw new CmsException("删除的角色对象中还有用户，不能删除");
		//删除角色信息
		return roleMapper.delete(id);
	}
	
	/**
	 * 添加角色信息
	 * @param role 角色对象
	 */
	@Override
	public int add(Role role) {
		return roleMapper.add(role);
	}

	/**
	 * 更新角色信息
	 * @param role 角色对象
	 */
	@Override
	public int update(Role role) {
		return roleMapper.update(role);
	}

	/**
	 * 根据指定角色id获取角色信息
	 * @param id 角色id
	 * @return 指定id的角色信息
	 */
	@Override
	public Role load(int id) {
		return roleMapper.load(id);
	}

	/**
	 * 获取所有的角色列表信息
	 */
	@Override
	public List<Role> listRole() {
		return roleMapper.listRoles();
	}

	/**
	 * 删除角色下的用户信息
	 * @param rid 角色id
	 */
	@Override
	public int deleteRoleUsers(int rid) {
		return userRoleMapper.deleteRoleUsers(rid);
	}

	/**
	 * 根据用户角色对应关系获取登录用户角色列表信息
	 * @param urs 当前登陆用户的用户角色列表信息
	 * @return 根据用户角色对应关系获取登录用户角色信息
	 */
	@Override
	public List<Role> listRole(List<UserRole> urs) {
		StringBuffer sf = new StringBuffer("");
		if (null != urs && urs.size() > 0) {
			sf.append("(");
			for (int i=0;i<urs.size();i++) {
				if(i== urs.size()-1){
					sf.append("'" + urs.get(i).getRoleId() + "'");
				}else{
					sf.append("'" + urs.get(i).getRoleId() + "',");
				}
			}
			sf.append(")");
			
		}
		String ids = sf.toString();
		if(!"".equals(ids) && null != ids){
			return roleMapper.listRole(ids);
		}
		return new ArrayList<Role>();
	}

	@Override
	public boolean isAdmin (List<Role> list) {
		// TODO Auto-generated method stub
		
		for (Role role : list) {
 
			if(RoleType.ROLE_COMPANY.equals(role.getRoleType())){
				return false;
			}else if (RoleType.ROLE_PERSON.equals(role.getRoleType())) {
				return false;
			}else if (RoleType.ROLE_ADMIN.equals(role.getRoleType())) {
				 return true;
			}
		}
		return false;
	}

}
